<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>CANopenNode: CO_driver_target.h</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">CANopenNode
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__CO__socketCAN__driver__target.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#files">Files</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">CO_driver_target.h<div class="ingroups"><a class="el" href="group__CO__socketCAN.html">socketCAN</a></div></div>  </div>
</div><!--header-->
<div class="contents">

<p>Linux socketCAN specific <a class="el" href="group__CO__driver.html">Driver</a> definitions for CANopenNode.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
Files</h2></td></tr>
<tr class="memitem:CO__driver__target_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="CO__driver__target_8h.html">CO_driver_target.h</a></td></tr>
<tr class="memdesc:CO__driver__target_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Linux socketCAN specific definitions for CANopenNode. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga63d0056e7f18144c6eee7b66f196377c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__socketCAN__driver__target.html#ga63d0056e7f18144c6eee7b66f196377c">CO_DRIVER_MULTI_INTERFACE</a>&#160;&#160;&#160;0</td></tr>
<tr class="memdesc:ga63d0056e7f18144c6eee7b66f196377c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi interface support.  <a href="#ga63d0056e7f18144c6eee7b66f196377c">More...</a><br /></td></tr>
<tr class="separator:ga63d0056e7f18144c6eee7b66f196377c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga88077a1ecc6ae53de0b40ae092d48452"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__socketCAN__driver__target.html#ga88077a1ecc6ae53de0b40ae092d48452">CO_DRIVER_ERROR_REPORTING</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:ga88077a1ecc6ae53de0b40ae092d48452"><td class="mdescLeft">&#160;</td><td class="mdescRight">CAN bus error reporting.  <a href="#ga88077a1ecc6ae53de0b40ae092d48452">More...</a><br /></td></tr>
<tr class="separator:ga88077a1ecc6ae53de0b40ae092d48452"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gac7fa0005b72d33a7808614d0395fbde4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__socketCAN__driver__target.html#gac7fa0005b72d33a7808614d0395fbde4">CO_DRIVER_USE_EMERGENCY</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:gac7fa0005b72d33a7808614d0395fbde4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Use CANopen Emergency object on CAN RX or TX overflow.  <a href="#gac7fa0005b72d33a7808614d0395fbde4">More...</a><br /></td></tr>
<tr class="separator:gac7fa0005b72d33a7808614d0395fbde4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga885fbec013ab54cbf12458610eaaaf7f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532">CO_ReturnError_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__socketCAN__driver__target.html#ga885fbec013ab54cbf12458610eaaaf7f">CO_CANmodule_addInterface</a> (<a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *CANmodule, const void *CANptr)</td></tr>
<tr class="memdesc:ga885fbec013ab54cbf12458610eaaaf7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add socketCAN interface to can driver.  <a href="#ga885fbec013ab54cbf12458610eaaaf7f">More...</a><br /></td></tr>
<tr class="separator:ga885fbec013ab54cbf12458610eaaaf7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf266a58e21acf104d9f19cd0da704afe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CO__dataTypes.html#ga449976458a084f880dc8e3d29e7eb6f5">bool_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__socketCAN__driver__target.html#gaf266a58e21acf104d9f19cd0da704afe">CO_CANrxBuffer_getInterface</a> (<a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *CANmodule, <a class="el" href="group__CO__dataTypes.html#ga1f1825b69244eb3ad2c7165ddc99c956">uint16_t</a> ident, const void **const CANptrRx, struct timespec *timestamp)</td></tr>
<tr class="memdesc:gaf266a58e21acf104d9f19cd0da704afe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check on which interface the last message for one message buffer was received.  <a href="#gaf266a58e21acf104d9f19cd0da704afe">More...</a><br /></td></tr>
<tr class="separator:gaf266a58e21acf104d9f19cd0da704afe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0d7a8fdf7a2fafd4c6d2f2dd1e1017b0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532">CO_ReturnError_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__socketCAN__driver__target.html#ga0d7a8fdf7a2fafd4c6d2f2dd1e1017b0">CO_CANtxBuffer_setInterface</a> (<a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *CANmodule, <a class="el" href="group__CO__dataTypes.html#ga1f1825b69244eb3ad2c7165ddc99c956">uint16_t</a> ident, const void *CANptrTx)</td></tr>
<tr class="memdesc:ga0d7a8fdf7a2fafd4c6d2f2dd1e1017b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set which interface should be used for message buffer transmission.  <a href="#ga0d7a8fdf7a2fafd4c6d2f2dd1e1017b0">More...</a><br /></td></tr>
<tr class="separator:ga0d7a8fdf7a2fafd4c6d2f2dd1e1017b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga57af27dfaaec8355e89fef506799a4b9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CO__dataTypes.html#gadb828ef50c2dbb783109824e94cf6c47">int32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__socketCAN__driver__target.html#ga57af27dfaaec8355e89fef506799a4b9">CO_CANrxWait</a> (<a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *CANmodule, int fdTimer, CO_CANrxMsg_t *buffer)</td></tr>
<tr class="memdesc:ga57af27dfaaec8355e89fef506799a4b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Functions receives CAN messages (blocking)  <a href="#ga57af27dfaaec8355e89fef506799a4b9">More...</a><br /></td></tr>
<tr class="separator:ga57af27dfaaec8355e89fef506799a4b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Linux socketCAN specific <a class="el" href="group__CO__driver.html">Driver</a> definitions for CANopenNode. </p>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="ga88077a1ecc6ae53de0b40ae092d48452"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga88077a1ecc6ae53de0b40ae092d48452">&#9670;&nbsp;</a></span>CO_DRIVER_ERROR_REPORTING</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define CO_DRIVER_ERROR_REPORTING&#160;&#160;&#160;1</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>CAN bus error reporting. </p>
<p>CO_DRIVER_ERROR_REPORTING enabled adds support for socketCAN error detection and handling functions inside the driver. This is needed when you have CANopen with "0" connected nodes as a use case, as this is normally forbidden in CAN.</p>
<p>Macro is set to 1 (enabled) by default. It can be overridden.</p>
<p>you need to enable error reporting in your kernel driver using: </p><div class="fragment"><div class="line">ip link set canX type can berr-reporting on</div></div><!-- fragment --><p> Of course, the kernel driver for your hardware needs this functionality to be implemented... </p>

</div>
</div>
<a id="ga63d0056e7f18144c6eee7b66f196377c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga63d0056e7f18144c6eee7b66f196377c">&#9670;&nbsp;</a></span>CO_DRIVER_MULTI_INTERFACE</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define CO_DRIVER_MULTI_INTERFACE&#160;&#160;&#160;0</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Multi interface support. </p>
<p>Enable this to use interface combining at driver level. This adds functions to broadcast/selective transmit messages on the given interfaces as well as combining all received message into one queue.</p>
<p>If CO_DRIVER_MULTI_INTERFACE is set to 0, then <a class="el" href="group__CO__driver.html#ga3a1131813110529494cee5e27c0bf28d" title="Initialize CAN module object. ">CO_CANmodule_init()</a> adds single socketCAN interface specified by CANptr argument. In case of failure, <a class="el" href="group__CO__driver.html#ga3a1131813110529494cee5e27c0bf28d" title="Initialize CAN module object. ">CO_CANmodule_init()</a> returns CO_ERROR_SYSCALL.</p>
<p>If CO_DRIVER_MULTI_INTERFACE is set to 1, then <a class="el" href="group__CO__driver.html#ga3a1131813110529494cee5e27c0bf28d" title="Initialize CAN module object. ">CO_CANmodule_init()</a> ignores CANptr argument. Interfaces must be added by <a class="el" href="group__CO__socketCAN__driver__target.html#ga885fbec013ab54cbf12458610eaaaf7f" title="Add socketCAN interface to can driver. ">CO_CANmodule_addInterface()</a> function after <a class="el" href="group__CO__driver.html#ga3a1131813110529494cee5e27c0bf28d" title="Initialize CAN module object. ">CO_CANmodule_init()</a>.</p>
<p>Macro is set to 0 (disabled) by default. It can be overridden.</p>
<p>This is not intended to realize interface redundancy!!! </p>

</div>
</div>
<a id="gac7fa0005b72d33a7808614d0395fbde4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gac7fa0005b72d33a7808614d0395fbde4">&#9670;&nbsp;</a></span>CO_DRIVER_USE_EMERGENCY</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define CO_DRIVER_USE_EMERGENCY&#160;&#160;&#160;1</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Use CANopen Emergency object on CAN RX or TX overflow. </p>
<p>If CO_DRIVER_USE_EMERGENCY is set to 1, then CANopen Emergency message will be sent, if CAN rx or tx bufers are overflowed.</p>
<p>Macro is set to 1 (enabled) by default. It can be overridden. </p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga885fbec013ab54cbf12458610eaaaf7f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga885fbec013ab54cbf12458610eaaaf7f">&#9670;&nbsp;</a></span>CO_CANmodule_addInterface()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532">CO_ReturnError_t</a> CO_CANmodule_addInterface </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *&#160;</td>
          <td class="paramname"><em>CANmodule</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>CANptr</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Add socketCAN interface to can driver. </p>
<p>Function must be called after CO_CANmodule_init.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">CANmodule</td><td>This object will be initialized. </td></tr>
    <tr><td class="paramname">CANptr</td><td>CAN module interface index (return value if_nametoindex(), NO pointer!). </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532" title="Return values of some CANopen functions. ">CO_ReturnError_t</a>: CO_ERROR_NO, CO_ERROR_ILLEGAL_ARGUMENT, CO_ERROR_SYSCALL or CO_ERROR_INVALID_STATE. </dd></dl>

</div>
</div>
<a id="gaf266a58e21acf104d9f19cd0da704afe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf266a58e21acf104d9f19cd0da704afe">&#9670;&nbsp;</a></span>CO_CANrxBuffer_getInterface()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__CO__dataTypes.html#ga449976458a084f880dc8e3d29e7eb6f5">bool_t</a> CO_CANrxBuffer_getInterface </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *&#160;</td>
          <td class="paramname"><em>CANmodule</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__CO__dataTypes.html#ga1f1825b69244eb3ad2c7165ddc99c956">uint16_t</a>&#160;</td>
          <td class="paramname"><em>ident</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void **const&#160;</td>
          <td class="paramname"><em>CANptrRx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct timespec *&#160;</td>
          <td class="paramname"><em>timestamp</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Check on which interface the last message for one message buffer was received. </p>
<p>It is in the responsibility of the user to check that this information is useful as some messages can be received at any time on any bus.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir"></td><td class="paramname">CANmodule</td><td>This object. </td></tr>
    <tr><td class="paramdir"></td><td class="paramname">ident</td><td>11-bit standard CAN Identifier. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">CANptrRx</td><td>message was received on this interface </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">timestamp</td><td>message was received at this time (system clock)</td></tr>
  </table>
  </dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
  <table class="retval">
    <tr><td class="paramname">false</td><td>message has never been received, therefore no base address and timestamp are available </td></tr>
    <tr><td class="paramname">true</td><td>base address and timestamp are valid </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ga57af27dfaaec8355e89fef506799a4b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga57af27dfaaec8355e89fef506799a4b9">&#9670;&nbsp;</a></span>CO_CANrxWait()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__CO__dataTypes.html#gadb828ef50c2dbb783109824e94cf6c47">int32_t</a> CO_CANrxWait </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *&#160;</td>
          <td class="paramname"><em>CANmodule</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>fdTimer</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">CO_CANrxMsg_t *&#160;</td>
          <td class="paramname"><em>buffer</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Functions receives CAN messages (blocking) </p>
<p>This function waits for received CAN message, CAN error frame, notification event or fdTimer expiration. In case of CAN message it searches <em>rxArray</em> from* <a class="el" href="structCO__CANmodule__t.html" title="Complete CAN module object. ">CO_CANmodule_t</a> and if matched it calls the corresponding CANrx_callback, optionally copies received CAN message to <em>buffer</em> and returns index of matched <em>rxArray</em>.</p>
<p>This function can be used in two ways, which can be combined:</p><ul>
<li>automatic mode: If CANrx_callback is specified for matched <em>rxArray</em>, then calls its callback.</li>
<li>manual mode: evaluate message filters, return received message</li>
</ul>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir"></td><td class="paramname">CANmodule</td><td>This object. </td></tr>
    <tr><td class="paramdir"></td><td class="paramname">fdTimer</td><td>File descriptor with activated timeout. If set to -1, then timer will not be used. File descriptor must be read externally if retval == -1! Read must be nonblocking and provides number of timer expirations since last read. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">buffer</td><td>Storage for received message or <em>NULL</em> if not used. </td></tr>
  </table>
  </dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
  <table class="retval">
    <tr><td class="paramname">&gt;=</td><td>0 index of received message in array from <a class="el" href="structCO__CANmodule__t.html" title="Complete CAN module object. ">CO_CANmodule_t</a> <em>rxArray</em>, copy of CAN message is available in <em>buffer</em>. </td></tr>
    <tr><td class="paramname">-1</td><td>no message received (timer expired or notification event or error) </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ga0d7a8fdf7a2fafd4c6d2f2dd1e1017b0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0d7a8fdf7a2fafd4c6d2f2dd1e1017b0">&#9670;&nbsp;</a></span>CO_CANtxBuffer_setInterface()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532">CO_ReturnError_t</a> CO_CANtxBuffer_setInterface </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *&#160;</td>
          <td class="paramname"><em>CANmodule</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__CO__dataTypes.html#ga1f1825b69244eb3ad2c7165ddc99c956">uint16_t</a>&#160;</td>
          <td class="paramname"><em>ident</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const void *&#160;</td>
          <td class="paramname"><em>CANptrTx</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set which interface should be used for message buffer transmission. </p>
<p>It is in the responsibility of the user to ensure that the correct interface is used. Some messages need to be transmitted on all interfaces.</p>
<p>If given interface is unknown or NULL is used, a message is transmitted on all available interfaces.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">CANmodule</td><td>This object. </td></tr>
    <tr><td class="paramname">ident</td><td>11-bit standard CAN Identifier. </td></tr>
    <tr><td class="paramname">CANptrTx</td><td>use this interface. NULL = not specified</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532" title="Return values of some CANopen functions. ">CO_ReturnError_t</a>: CO_ERROR_NO or CO_ERROR_ILLEGAL_ARGUMENT. </dd></dl>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Tue Jun 9 2020 17:29:32 for CANopenNode by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>
